package com.ccit.springbootlaw.controller.base;

import com.ccit.springbootlaw.controller.resful.Code;
import com.ccit.springbootlaw.controller.resful.Result;
import com.ccit.springbootlaw.pojo.Case;
import com.ccit.springbootlaw.pojo.PageBean;
import com.ccit.springbootlaw.service.CaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

/**
 * 案件RESTful控制器
 * 提供案件相关的RESTful API接口
 */
@RestController
@RequestMapping("/api/cases")
public class CaseController {

    @Autowired
    private CaseService caseService;

    /**
     * 根据ID查找案件
     *
     * @param id 案件ID
     * @return 返回查询结果
     */
    @GetMapping("/{id}")
    public Result findById(@PathVariable int id) {
        Case result = caseService.findById(id);
        if (result != null) {
            return new Result(Code.GET_OK, result, "查询成功");
        } else {
            return new Result(Code.GET_ERR, null, "查询失败，未找到案件");
        }
    }

    /**
     * 根据条件查找案件
     *
     * @param caseInfo  案件信息对象，包含查询条件
     * @param page      包含分页参数
     * @param startTime 开始时间（可选）
     * @param endTime   结束时间（可选）
     * @return 返回查询结果
     */
    @PostMapping("/search/{page}")
    public Result findByCriteria(@RequestBody Case caseInfo, @PathVariable int page,
                                 @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
                                 @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) {
        PageBean<Case> result = caseService.findByCriteria(caseInfo, startTime, endTime, page);
        if (result != null) {
            return new Result(Code.GET_OK, result, "查询成功");
        } else {
            return new Result(Code.GET_ERR, null, "查询失败，未找到符合条件的案件");
        }
    }

    /**
     * 插入新的案件
     *
     * @param caseInfo 案件信息对象
     * @return 返回插入结果
     */
    @PostMapping
    public Result insertCase(@RequestBody Case caseInfo) {
        int rows = caseService.insertCase(caseInfo);
        if (rows > 0) {
            return new Result(Code.ADD_OK, caseInfo, "插入成功");
        } else {
            return new Result(Code.ADD_ERR, null, "插入失败");
        }
    }

    /**
     * 更新案件信息
     *
     * @param caseInfo 案件信息对象，包含要更新的信息
     * @return 返回更新结果
     */
    @PutMapping
    public Result updateCase(@RequestBody Case caseInfo) {
        int rows = caseService.updateCase(caseInfo);
        if (rows > 0) {
            return new Result(Code.UPDATE_OK, caseInfo, "更新成功");
        } else {
            return new Result(Code.UPDATE_ERR, null, "更新失败");
        }
    }

    /**
     * 根据ID删除案件
     *
     * @param id 案件ID
     * @return 返回删除结果
     */
    @DeleteMapping("/{id}")
    public Result deleteCaseById(@PathVariable int id) {
        int rows = caseService.deleteCaseById(id);
        if (rows > 0) {
            return new Result(Code.DELETE_OK, null, "删除成功");
        } else {
            return new Result(Code.DELETE_ERR, null, "删除失败");
        }
    }

    /**
     * 查找所有案件
     *
     * @param page 包含分页参数
     * @return 返回所有案件的列表
     */
    @GetMapping("/all/{page}")
    public Result findAllCases(@PathVariable int page) {
        PageBean<Case> result = caseService.findAllCases(page);
        if (result != null) {
            return new Result(Code.GET_OK, result, "查询成功");
        } else {
            return new Result(Code.GET_ERR, null, "查询失败，未找到任何案件");
        }
    }
}